原始笔记

Code Refactoring

Code Refactoring

正文

Write Tests first

When faced with an existing piece of code that needs modifying a good refactoring process to follow is:

  1. Make sure you have tests that verify the current behaviour
  2. Refactor the code
  3. Verify that that the behaviour of the code is identical to that before refactoring.

纯函数

一个函数要称为纯函数,通常需要同时满足两个条件。

条件一:相同输入,始终得到相同输出

def square(x):
    return x * x

调用多少次:

square(3)  # 始终返回 9

函数结果只取决于参数 x,不依赖时间、随机数、全局变量或文件内容。

下面这个函数不是纯函数:

tax_rate = 0.1

def calculate_price(price):
    return price * (1 + tax_rate)

虽然它看起来很简单,但结果依赖外部的全局变量 tax_rate。如果全局变量变化,相同的 price 会得到不同结果。

条件二:不产生副作用

副作用指函数除了返回结果,还改变了函数外部可观察的状态,例如:

  • 修改全局变量
  • 修改传入的可变对象
  • 打印内容
  • 写文件
  • 修改数据库
  • 绘图
  • 发送网络请求

推荐的程序结构

良好的设计通常把代码分成两部分:

非纯代码:获取输入
    ↓
纯函数:处理核心逻辑
    ↓
非纯代码:输出或保存结果

核心思想

纯函数并不是要求整个程序完全没有副作用,而是:

把复杂、关键、需要大量测试的逻辑尽量写成纯函数,把不可避免的输入输出操作限制在少量简单的胶水代码中。

Switch to English